Spring Bootでユニットテストを行う
はじめに
タイトル通り、Spring Bootを使ったアプリでのユニットテストについてです。Beanとして使う様なSpringの機能を使用したクラスのユニットテストを書く際に、何が必要なのかについて書きます。単純なPOJOのような(つまりSpringの機能を使わない)クラスは純粋のJUnitの書き方で大丈夫なので、本エントリの内容は当てはまりません。
テストの実装
ではテストの書き方についてです。先に結論を書いてしまうと
- @RunWith
- @SpringApplicationConfiguration
のアノテーションを使用することがポイントとなります。
テストの実例と解説
以下、テストの実例です。
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(Application.class) public class ConfigReaderTest { @Test public void testXXXX(){ //なんらかのJUnitのテスト }
先に書いた2つのアノテーションをテストクラスに付けていることが分かります。
「@RunWith」では引数に「SpringJUnit4ClassRunner.class」を指定しています。この記述については、Spring Bootでユニットテストを行う際の「お約束」だと考えておけばいいかと思います。
「@SpringApplicationConfiguration」は引数に「Application.class」を指定していますが、このクラスはアプリによって異なってきます。その理由は、このクラスにはApplicationContextとして指定したクラスを記述する必要があるためです。多くの場合、mainを記述したクラスに以下の様にApplicationContextを指定するかと思います(Webアプリとコンソールアプリとでは微妙に違うかもしれませんが)。
@SpringBootApplication public class Application { public static void main(String[] args) { ApplicationContext ctx = SpringApplication.run(Application.class, args); // (以降略) } }
Building an Application with Spring Bootより抜粋
まとめ
以上で、Spring Bootでユニットテストを実行することができます。テストの構文などはJUnitと同じなようです。JUnitにアノテーションを追加することでSpringのテストを可能とするところが、Spring Bootらしいと思いました。何かの役に立てば幸いです。